在 VisualApplets 中,實作了執行幾何轉換、結合幾何轉換與 Distortion Correction 以及由影像矩(image moments)控制之幾何轉換的範例設計。幾何轉換是以目標至來源對應(即反向)的方式來實作。此方法對於確保傳送至 PC 的目標影像中沒有遺失像素至關重要 [Bur06]。我們基於運算子 FrameBufferRandomRead 實作了反向幾何轉換,並另行基於運算子 PixelReplicator 進行實作。差異將在接下來的子小節中說明。在這些子小節中將詳細介紹範例設計。
| 簡要說明 | |
|---|---|
|
File: \examples\Processing\Geometry\GeometricTransformation\GeometricTransformation_ FrameBufferRandomRead.va |
|
|
Default Platform: mE5-MA-VCL |
|
|
短說明 幾何轉換:使用運算子 FrameBufferRandomRead 進行旋轉、平移與 Scaling |
|
VA 設計「Geometric Transformation_FrameBufferRandomRead.va」中的幾何轉換採用目標至來源對應來實作。此方法對於確保傳送至 PC 的目標影像中沒有遺失像素至關重要 [Bur06]。
來源影像的座標
是透過對所有目標座標進行反向幾何轉換來計算的
。
在座標
的位置,來源影像中的像素值會以 Parallelism 1 FrameBufferRandomRead 透過運算子讀取。該運算子將每個像素個別儲存在 DRAM 中,並逐一讀取像素。當計算出的來源影像座標與來源影像中的像素座標不符時,線性插值(Linear Interpolation)有助於修正輸出至 PC 的影像中的像素值。
在圖 297 中可以看到基本的設計結構。
此設計由 Camera Link Base 組態中的相機介面(BaseGrayCamera_Camera)以及 HierarchicalBox Geometric Transformation 組成,在該方塊中執行所擷取影像的 Scaling、旋轉和平移。運算子 ImageBuffer_Buffer 提供儲存影像的機會。透過 DMA(運算子 DmaToPC_DMA0),影像會傳輸至 PC。
在 298 中可以看到 HierarchicalBox GeometricTransformation 的內容。 參數 IntParamTranslator、FloatParamReference 與 IntParamReference 讓您可以非常舒適地設定幾何轉換的相關參數(Scaling、旋轉、平移的值以及影像尺寸)。 這些 Property 為影像 Height 與 Width、您希望在 x 和 y 方向平移影像的像素數(參數:Translatex 與 Translatey)以及在 x 和 y 方向的 Scale Factor Scalex 與 Scaley。您可以使用參數 Phi 以度數設定旋轉角度。作為替代方案,您可以透過在 HierarchicalBox GeometricTransformation 上按滑鼠右鍵來設定這些 Properties。您可以在圖 298 中看到此方塊的內容。
影像 SourceImage 以線性方式寫入緩衝區 FrameBufferRandomRead。每個像素的相鄰像素會以 2x2 核心(HierarchicalBox NextNeighbours)儲存。
目標影像的座標
(eq. 21)
係由運算子 CreateBlankImage, CoordinateX 和 CoordinateY
中根據方程式 OutputImage (包含在 HierarchicalBox CoordinateTransformation中)
(請參見圖 299 和 300)。
座標
可根據 eq. 以反方向進行旋轉、平移及/或 Scaling。 21。如上所述,旋轉角度
以及用於平移和 Scaling 的參數
和
可透過傳輸參數設定對應的常數來選擇。在圖
301 中,您可以看到 eq. 的 VA 實作方式 21 並具備額外 Scaling 的功能。
反向轉換產生的座標即為來源座標
和
(eq. 21)。在 HierarchicalBox SplitFractionalAndIntegerBit
(見圖 298)
這些座標的整數和小數位元是分開的。整數位元對應於來源影像中的像素
位置,
是算子的座標輸入 FrameBufferRandomRead 在 x 和 y 方向(見圖 298)。
此算子讀取來源影像中對應座標處的像素值資訊(Parallelism = 1)以及其相鄰像素(見上文)。
來源座標的小數位元
和
對應於來源影像中的像素間位置。
結合這些資訊與來源影像中相鄰像素的像素值資訊,目標影像中的真實像素值將在 HierarchicalBox 中進行雙線性
內插 Interpolation。有關內插過程的詳細說明,請參見 [Bur06]。
在圖 302 和 303 中,您可以看一個幾何轉換的範例 ,其中包含來源影像和目標影像。執行了在 x 和 y 方向平移 100 個像素以及旋轉 45° 的操作。
| 簡要說明 | |
|---|---|
|
檔案: \examples\Processing\Geometry\GeometricTransformation\GeometricTransformation_ImageMoments.va |
|
|
Default Platform: mE5-MA-VCL |
|
|
短說明 幾何轉換:使用影像矩將物件旋轉和平移至影像中心 |
|
在此範例設計中,使用影像矩來決定 RGB 影像中物件的位置和旋轉角度。 執行旋轉至水平方向並平移至影像中心的操作。預設情況下,輸入影像尺寸為 640x240 像素 ,輸出影像尺寸為 256x128 像素。 在圖 304 中,您可以看到基本的設計結構。
該設計由 Camera Link base 組態的 RGB 相機介面(BaseRgbCamera_Camera)以及 Geometric Transformation HierarchicalBox 組成,在此方塊中執行所擷取影像的旋轉和平移。在「Properties」下按一下滑鼠右鍵 ,即可設定輸入與輸出影像尺寸以及二值化閾值。此閾值與下方所述的影像矩計算相關。 幾何轉換是透過目標到來源對應(參見 節中的導言文字)來完成。 透過 DMA(算子 DmaToPC_DMA0),影像會傳輸至 PC。在圖 305 中,您可以看到 Geometric Transformation 的內容。
相對於水平位置的旋轉角度和物件的重心 位置,是在 HierarchicalBox ImageMoments 中使用影像矩來決定的,該影像矩是在二值化影像(HierachicalBox Binarization)上計算的。ImageMoments 的內容 等同於 VA 範例「ImageMoments.va」的 ImageMoments 方塊(見 325 節中的圖 ),但沒有計算物件的偏心率。HierachicalBox ImageMoments 的輸出連結(由上到下)為 x 和 y 方向的重心位置以及旋轉角度。 根據這些參數計算來源座標(根據方程式 21)是 HierachicalBox CoordinateTransformation 的內容。 在 306 中,您可以看到此方塊的內容。
在 HierarchicalBox 同步化 x 和 y 方向重心及旋轉的單一像素值會擴展至輸出影像
尺寸,該尺寸定義於 HierarchicalBox 中 OutputImage。此方塊的輸出連接代表目標影像坐標
。在 HierarchicalBox
InverseTransformation 來源坐標
和
是根據方程式計算得出的。
21。在圖 307
中,您可以看到此方塊的內容。
此方塊中的設計結構類似於範例「GeometricTransformation_FrameBufferRandomRead.va」與「GeometricTransformation_PixelReplicator.va」中的逆轉換實作。不同之處在於,x 和 y 方向的平移參數是由重心與 x 和 y 方向影像中心之間的差值決定的(請參閱方塊內容 Translation_x 和 Translation_y)。旋轉角度(方塊內容 Phi)由影像動差計算的結果定義。回到圖中的基本設計結構 304。計算出的來源影像坐標
和
代表方塊的輸出連接 CoordinateTransformation。在方塊 GeometricTransformation
(見圖 308) 中,使用運算子執行幾何轉換
FrameBufferRandomRead 以及正確目標像素值的雙線性插值,這與範例「GeometricTransformation_FrameBufferRandomRead.va」類似(請參閱圖 298 位於章節
)。
以圖309中的示例物體為例,您可以在圖310 中看到 經過方向與位置校正後的目標影像。
| 簡要說明 | |
|---|---|
|
檔案: \examples\Processing\Geometry\GeometricTransformation\GeometricTransformation_PixelReplicator.va |
|
|
Default Platform: mE5-MA-VCL |
|
|
短說明 幾何變換:使用運算子進行旋轉、平移、縮放 PixelReplicator |
|
VisualApplets 設計範例「GeometricTransformation_PixelReplicator.va」執行與範例 「GeometricTransformation_FrameBufferRandomRead.va」相同的幾何變換, 但效能更高。如前所述,運算子 FrameBufferRandomRead 會將每個像素分別儲存於 DRAM 中,並依序逐一讀取。在此範例中,一定數量 的像素會被儲存於一個 DRAM 儲存單元中。 該範例設計僅在待讀取的像素與前一個像素不在同一個 DRAM 儲存單元時,才會從 DRAM 讀取。圖311 中的範例 每 DRAM 儲存單元包含 8 個像素,可讓您了解其效能提升的程度。
DRAM 區塊以綠色標示。要讀取 a 至 i 這 9 個像素,只需 3 個 DRAM 週期,而非 9 個。在此我們達成了 3 的有效並行度。 單一 RAM 儲存單元最多可儲存 32 個 8 位元像素(marathon VCL 資料寬度:256 位元)。 RAM 儲存單元區塊的 ROI 形狀由 幾何變換的旋轉角度所定義。在此範例中,預設選擇 9x3 像素的 RAM 儲存單元形狀。 基本設計結構等同於 圖297中的設計結構,但未包含運算子 PARALLELdn_To1。 HierarchicalBox GeometricTransformation 的內容也等同於範例「GeometricTransformation_FrameBufferRandomRead.va」中 對應的方塊(圖298)。差異在於該運算子 FrameBufferRandomRead 已被 HierarchicalBox FrameBufferRandomRead_Par8所取代。您可參閱圖312 了解其內容。
盒內 CollectNeighbors 原始影像被分割為多個子 ROI,這些子 ROI 定義了每個 RAM 單元的大小。此處選擇 9x3 作為 RAM 單元大小。在
的
HierarchicalBoxes SplitAdressX 和 SplitAdressY 來源座標的整數位元部分
和
由於逆幾何變換(參見第
) 分為兩個部分。上方的位元部分(即
SplitAdressX 和 SplitAdressY) 代表 DRAM 儲存單元的座標,低位元部分則代表該
DRAM 儲存單元內的像素位置。會根據 HierarchicalBox 中的 DRAM 儲存單元座標讀取該 DRAM 儲存單元 緩衝區 (包含運算子 FrameBufferRandomRead) 若尚未在
HerarchicalBox 中做出決定 RepeatDecider用於重複使用先前的 DRAM 單元。如果決定重複使用先前的單元,則需要複製 DRAM 單元的像素值。
這是在 HierarchicalBox ReplicateValues 中透過運算子 PixelReplicator。在方塊 ExtractSubKernel 來執行的。使用像素座標作為輸出,從 DRAM 單元中提取所需的像素值
及其相鄰像素,作為 SplitAdressX 和 SplitAdressY (下方輸出連結)。
正確目標像素值的雙線性插值運算等效於以下範例: .
| 簡要說明 | |
|---|---|
|
檔案: \examples\Processing\Geometry\GeometricTransformation\GeometricTransformation_ DistortionCorrection.va |
|
|
Default Platform: mE5-MA-VCL |
|
|
短說明 幾何轉換(Geometric Transformation):使用運算子 PixelReplicator 進行旋轉、平移、Scaling、畸變與梯形校正(Keystone correction) |
|
VA 範例「GeometricTransformation_DistortionCorrection.va」是設計「GeometricTransformation_PixelReplicator.va」的擴充版本。 此設計中額外 實作了畸變與梯形校正(根據方程式 22 與方程式 23)。在下文中,將僅說明與 「GeometricTransformation_PixelReplicator.va」不同的部分。基本設計結構 可參見圖 313。
來自 CameraLink 基本組態相機介面的灰階影像(最大尺寸:4096x4096 像素) (BaseGrayCamera_Camera)會在 HierarchicalBox GeoTransAndDistCorr 中進行轉換,並透過 DMA 傳輸至 PC (DmaToPC_DMA0)。其結構等效於設計「GeometricTransformation_FrameBufferRandomRead」與 「GeometricTransformation_PixelReplicator」。 GeoTransAndDistCorr 的結構等效於這兩個設計中的 GeometricTransformation 方塊 (參見圖 298)。此處執行反向轉換,此外還執行 畸變與梯形校正。方塊 CoordinateTransformation(位於方塊 GeometricTransformation 內)的內容如圖 314 所示。
如同設計「GeometricTransformation_FrameBufferRandomRead」與
「GeometricTransformation_PixelReplicator」(章節 和
),目標座標
會根據方程式進行反向轉換
21 並進行額外的 Scaling(另見章節
)。
透過反向轉換產生的座標,我們接著在 HierarchicalBoxes
KeystoneCorrrection 和 DistortionCorrection中執行反向梯形校正與畸變校正。
這些方塊的內容顯示於圖
315 和圖
314.
在這些方塊中,式 22 以及
式 23 已實作完成。方塊中的矩陣元素 m1 至 m9
Z_x, Z_y 和 N (見圖 315)
可藉由 OpenCV 函式庫協助計算 [Ope16b]。關於範例影像 "Example.tif"
(位於 \examples\Processing\Geometry\GeometricTransformation 下),您可以在相同位置的文字檔案 "MatrixValues.txt"
中找到範例矩陣數值。
針對圖 314 中的畸變校正,
首先會將座標轉換至相對於光學中心(CoordinateTransformation_x 和 CoordinateTransformation_y) 的座標系統中,
該中心在大多數情況下即為影像中心。在 HierarchicalBox DistortionCoefficient 中,會計算距離
(請參見式 23)至光學中心的距離。對於每一個
,
查詢表中隨後即存在一個畸變校正
參數
(請參見圖
317)。
查詢表是使用 Matlab 模組在外部建立的,您可以在 \examples\Processing\Geometry\GeometricTransformation
\LUTDistortionCorrection.m 中找到該模組以及畸變參數
和
使用 OpenCV library 建立 [Ope16b]。在「LUTDistortionCorrection.m」中,您可以找到校正參數的範例
和
針對範例影像「Example.tif」(位於 \examples\Processing\Geometry\GeometricTransformation 下)[Ope16a]。
係數
隨後會與座標相乘
和
(圖
314)。隨後,產生的失真座標會轉換回相對於「左上影像角落」的座標系統(請參閱方框 CoordinateTransformation_x 和 CoordinateTransformation_y)。其結果即為來源影像座標
和
。HierarchicalBox 的內容
LimitCoordinateValues (圖 314)
會為轉換後的影像座標設定邊界條件。在分離整數和小數點位元部分
(請參閱方框 SplitFractionalAndIntegerBit 的內容,如圖 298)之後,會從來源影像讀取所計算出的對應整數來源影像座標處的像素值。
根據 [ Interpolation],小數點位元部分可用於雙線性內插(請參閱Bur06),
以便根據來源影像中的像素間位置來校正輸出影像中的像素值。透過 DMA 將信號傳輸至 PC。
為了進行示範,您可以在圖 318,
319 和
320 中看到失真的來源影像、經過梯形失真 (Keystone) 與 Distortion Correction 的目標影像,以及旋轉且經過 Distortion Correction 的目標影像。
| 簡要說明 | |
|---|---|
|
檔案: \examples\Processing\Geometry\GeometricTransformation\DistortionCorrection.va |
|
|
Default Platform: mE5-MA-VCL |
|
|
短說明 在此範例設計中實作了 Distortion Correction。 |
|
在設計「DistortionCorrection.va」中,實作了根據方程式 22 的 Distortion Correction。它與設計「GeometricTransformation_DistortionCorrection.va」中的設計類似, 但未執行幾何轉換與梯形失真 (Keystone) 校正。您可以在圖 321 中看到基本設計結構。
此設計由適用於 Camera Link 基本配置灰階相機的介面、緩衝區模組、HierachicalBox DistortionCorrection 以及 DmaToPC 組成。灰階影像的 Distortion Correction 是在 DistortionCorrection 中執行。您可以在圖 322 中查看其內容。
此結構類似於以下項目中 HierarchicalBox 的內容 GeometricTransformation (請參閱
圖 298)位於章節 的設計「GeometricTransformation_PixelReplicator.va」中。運算子 FrameBufferRandomRead 已替換
為 HierarchicalBox FrameBufferRandomRd_Par8 ,這也如同在「GeometricTransformation_PixelReplicator.va」和「GeometricTransformation_DistorationCorrection.va」中所做的一樣
(請參閱章節 和
)。來源影像會線性寫入緩衝元件
FrameBufferRandomRd_Par8中。在此模組中,三個相鄰像素也會與每個像素一起儲存(請參閱方塊 CollectNeighbors 中的方塊
FrameBufferRandomRd_Par8)。在方塊 CoordinateTransformation/ OutputImage 中
目標影像坐標是使用運算子 CreateBlankImage,
CoordinateX 和 CoordinateY建立的。這些坐標會根據方程式 22 轉換為
來源影像坐標
中根據方程式
InverseCorrection (請參閱 方塊 CoordinateTransformation)。您可以在圖中查看其內容 323.
它相當於 box 的實作 DistortionCorrection "GeometricTransformation_DistortionCorrection.va"(請參閱圖
316)。對於相對於影像中心
的每個目標影像半徑,會在 HierarchicalBox 中
選取一個 lookup table 值 C_r DistortionCoefficient. 選取一個 lookup table 值 ,該值會與目標影像座標相乘
根據公式 22
並轉換回相對於第一個像素的座標系統(請參閱 CoordinateTransformation_x_1 和 CoordinateTransformation_y_1)。如圖所示 322 ,所產生的來源座標會在 box 中分割為整數與小數部分
SplitFractionalAndIntegerBit。整數部分用於讀取對應來源影像座標處的來源影像像素,而小數部分則用於最終結果的雙線性插值。然後,經過失真校正的影像會透過 DMA 傳輸至 PC。




上一頁

